ホームに戻る
出典 :
目次 :
VBAにおけるプロパティ
モジュール(オブジェクト)外部に対しては変数、内部に対してはメソッドとして振る舞うプロシージャのこと。C#などのプロパティと共通の概念である。
モジュール外からは変数のように、値の取得・設定が簡便に行える。
クラスモジュール、フォーム、標準モジュールのいずれにもプロパティ(カスタムプロパティ)を作成することができる。
プロパティの例
Range("A1").Value
の Value は Range オブジェクトのプロパティである。
この Value プロパティは値の取得・設定が可能であるが、取得・設定のいずれかのみが可能なものも存在する。
カスタムプロパティにおいても取得(Get)・設定(Let / Set)を自由に定義することができる。
カスタムプロパティの定義例
対象がオブジェクト以外(プリミティブ型)
SomeClass.cls (クラスモジュール)
Option Explicit
' プロパティで取得・設定する実体
Private m_Text As String
' 値の取得(Get)
Public Property Get Text() As String
' m_Text の値を返す
Text = m_Text
End Property
' 値の設定(Let)
Public Property Let Text(val As String)
' m_Text に書き戻す
m_Text = val
End Property
SomeModule.bas (標準モジュール)
Option Explicit
Private Sub DoSomething()
Dim sc As New SomeClass
' Text プロパティに値を設定 (Let を呼び出す)
sc.Text = "テスト"
Dim ttt
' Text プロパティの値を取得 (Get を呼び出す)
ttt = sc.Text
End Sub
上記は、基本的なカスタムプロパティの定義例である。
ここで「プリミティブ型」は数値型や文字列など、オブジェクト(クラス)以外を指す。
Get と Let のプロシージャ名(Text)を同一とすることで、一対のプロパティとして関連付けることができる。
この場合 Get の戻り値と Let の引数は型が同じでないとエラーとなる点に注意。
対象がオブジェクト
SomeClass.cls (クラスモジュール)
Option Explicit
' プロパティで取得・設定する実体
Private m_Obj As Object
' オブジェクト参照の取得(Get)
Public Property Get Obj() As Object
' m_Obj (への参照)を返す
Set Obj = m_Obj
End Property
' オブジェクト参照の設定(Set)
Public Property Set Obj(val As Object)
' m_Obj に書き戻す
Set m_Obj = val
End Property
SomeModule.bas (標準モジュール)
Option Explicit
Private Sub DoSomething()
Dim sc As New SomeClass
' Obj プロパティに値を設定 (Set を呼び出す)
Set sc.Obj = New OtherClass
Dim ttt As Object
' Obj プロパティの値を取得 (Get を呼び出す)
Set ttt = sc.Obj
End Sub
プリミティブ型では値の設定に Let を用いていたが、オブジェクトでは Set を用いる点が異なる。
余談
オブジェクトを対象とする場合、Property Set ではなく Property Let で定義しても問題なく動作する。
その場合は呼び出す際に Set ではなく Let を付与する。
ただ混乱のもととなりかねないため、特段の事情が無い限りは Set を用いるほうが望ましい。